package es.ucm.fdi.isbc.viviendas.representacion;

import java.util.ArrayList;
import java.util.Collections;

import jcolibri.cbrcore.CBRCase;


public class DatosCoincidenciaFavoritos extends ArrayList<CoincidenciaFavorito> {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public DatosCoincidenciaFavoritos(){
		super();
	}
	
	public boolean contains(CBRCase caso){
		for(CoincidenciaFavorito c:this){
			if(c.getCaso().equals(caso))
				return true;
		}
		return false;
	}
	public void add(CBRCase caso){
		if(contains(caso)){
			int i = getIndex(caso);
			CoincidenciaFavorito cf = this.get(i);
			cf.setCont(cf.getCont()+1);
		}
		else{
			CoincidenciaFavorito cf = new CoincidenciaFavorito(caso);
			this.add(cf);
		}
	}
	
	public void addconPeso(CBRCase caso, double peso){
		if(contains(caso)){
			int i = getIndex(caso);
			CoincidenciaFavorito cf = this.get(i);
			cf.setCont(cf.getCont()+peso);
		}
		else{
			CoincidenciaFavorito cf = new CoincidenciaFavorito(caso);
			cf.setCont(peso);
			this.add(cf);
		}
	}
	public int getIndex(CBRCase caso){
		int i=0;
		for(CoincidenciaFavorito c:this){
			if(c.getCaso().equals(caso))
				return i;
			i++;
		}
		return (Integer) null;
	}
	public ArrayList<CBRCase> getNBestCases(int n){
		Collections.sort(this);
		System.out.println(this);
		ArrayList<CBRCase> casos = new ArrayList<CBRCase>();
		int i=0;
		int lenght = this.size();
		for(CoincidenciaFavorito c:this){
			casos.add(c.getCaso());
			if(i==n-1 || i == lenght - 1){
				return casos;
			}
			i++;
		}
		return casos;
	}
	
	public void add(CBRCase caso, int veces)
	{
		CoincidenciaFavorito cf = new CoincidenciaFavorito(caso);
		cf.setCont(veces);
		this.add(cf);
	}
}
